﻿using System;
using System.Collections.Generic;
using System.Data;

namespace SistemaCarros.Entidades
{
    [Serializable]
    public class Carro
    {
        public int Id { get; set; }
        public int NumeroPortas { get; set; }

        public string Nome { get; set; }
        public string Cor { get; set; }
        public string Tipo { get; set; }
        public string Placa { get; set; }

        public double Valor { get; set; }

        public Proprietario Proprietario { get; set; }
        public Fabricante Fabricante { get; set; }

        public string NomeProprietario
        {
            get { return Proprietario == null ? string.Empty : Proprietario.Nome; }
        }
        public string NomeFabricante
        {
            get { return Fabricante == null ? string.Empty : Fabricante.Nome; }
        }

        public List<Carro> Carregar()
        {
            string comandoSQL = "SELECT c.id as 'id', c.nome as 'nome', c.cor as 'cor', c.tipo as 'tipo', numero_portas as 'numero_portas',";
            comandoSQL += "c.placa as 'placa', c.valor as 'valor', c.id_proprietario as 'id_proprietario', p.nome as 'nome_proprietario', c.id_fabricante as 'id_fabricante', f.nome as 'nome_fabricante' FROM carros c ";
            comandoSQL += "INNER JOIN fabricantes f ON f.id = c.id_fabricante ";
            comandoSQL += "INNER JOIN proprietarios p ON p.id = c.id_proprietario;";

            DataSet ds = Db.ExecutarSQL(comandoSQL);
            List<Carro> lst = new List<Carro>();

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                lst.Add(new Carro()
                {
                    Id = Convert.ToInt32(dr["id"].ToString()),
                    Nome = dr["nome"].ToString(),
                    Cor = dr["cor"].ToString(),
                    Tipo = dr["tipo"].ToString(),
                    NumeroPortas = Convert.ToInt32(dr["numero_portas"].ToString()),
                    Placa = dr["placa"].ToString(),
                    Valor = Convert.ToDouble(dr["valor"].ToString()),

                    Proprietario = new Proprietario()
                    {
                        Id = Convert.ToInt32(dr["id_proprietario"].ToString()),
                        Nome = dr["nome_proprietario"].ToString(),
                    },
                    Fabricante = new Fabricante()
                    {
                        Id = Convert.ToInt32(dr["id_fabricante"].ToString()),
                        Nome = dr["nome_fabricante"].ToString(),
                    }
                });
            }

            return lst;
        }
        public void CarregarDados()
        {
            string comandoSQL = "SELECT c.id as 'id', c.nome as 'nome', c.cor as 'cor', c.tipo as 'tipo', c.numero_portas as 'numero_portas',";
            comandoSQL += "c.placa as 'placa', c.valor as 'valor', c.id_proprietario as 'id_proprietario', p.nome as 'nome_proprietario', c.id_fabricante as 'id_fabricante', f.nome as 'nome_fabricante' FROM carros c ";
            comandoSQL += "INNER JOIN fabricantes f ON f.id = c.id_fabricante ";
            comandoSQL += "INNER JOIN proprietarios p ON p.id = c.id_proprietario ";
            comandoSQL += "WHERE c.id = @id;";
            comandoSQL = comandoSQL.Replace("@id", Id.ToString());

            DataSet ds = Db.ExecutarSQL(comandoSQL);
            DataRow dr = ds.Tables[0].Rows[0];

            Id = Convert.ToInt32(dr["id"].ToString());
            Nome = dr["nome"].ToString();
            Cor = dr["cor"].ToString();
            Tipo = dr["tipo"].ToString();
            NumeroPortas = Convert.ToInt32(dr["numero_portas"].ToString());
            Placa = dr["placa"].ToString();
            Valor = Convert.ToDouble(dr["valor"].ToString());

            Proprietario = new Proprietario()
            {
                Id = Convert.ToInt32(dr["id_proprietario"].ToString()),
                Nome = dr["nome_proprietario"].ToString()
            };
            Fabricante = new Fabricante()
            {
                Id = Convert.ToInt32(dr["id_fabricante"].ToString()),
                Nome = dr["nome_fabricante"].ToString()
            };
        }
        public void Salvar()
        {
            string comandoSQL = "INSERT INTO carros VALUES (@id, '@nome', '@cor', '@tipo', @numero_portas, '@placa', @valor, @id_proprietario, @id_fabricante)";
            comandoSQL = comandoSQL.Replace("@nome", Nome);
            comandoSQL = comandoSQL.Replace("@cor", Cor);
            comandoSQL = comandoSQL.Replace("@tipo", Tipo);
            comandoSQL = comandoSQL.Replace("@numero_portas", NumeroPortas.ToString());
            comandoSQL = comandoSQL.Replace("@placa", Placa);
            comandoSQL = comandoSQL.Replace("@valor", Valor.ToString().Replace(',', '.'));
            comandoSQL = comandoSQL.Replace("@id_proprietario", Proprietario.Id.ToString());
            comandoSQL = comandoSQL.Replace("@id_fabricante", Fabricante.Id.ToString());
            comandoSQL = comandoSQL.Replace("@id", Id.ToString());

            Db.ExecutarComando(comandoSQL);
        }
        public void Editar()
        {
            string comandoSQL = "UPDATE carros SET nome = '@nome', cor = '@cor', tipo = '@tipo', numero_portas = @numero_portas, placa = '@placa', valor = @valor, ";
            comandoSQL += "id_proprietario = @id_proprietario, id_fabricante = @id_fabricante WHERE id = @id;";

            comandoSQL = comandoSQL.Replace("@nome", Nome);
            comandoSQL = comandoSQL.Replace("@cor", Cor);
            comandoSQL = comandoSQL.Replace("@tipo", Tipo);
            comandoSQL = comandoSQL.Replace("@numero_portas", NumeroPortas.ToString());
            comandoSQL = comandoSQL.Replace("@placa", Placa);
            comandoSQL = comandoSQL.Replace("@valor", Valor.ToString().Replace(',', '.'));
            comandoSQL = comandoSQL.Replace("@id_proprietario", Proprietario.Id.ToString());
            comandoSQL = comandoSQL.Replace("@id_fabricante", Fabricante.Id.ToString());
            comandoSQL = comandoSQL.Replace("@id", Id.ToString());

            Db.ExecutarComando(comandoSQL);
        }
        public void Excluir()
        {
            string comandoSQL = "DELETE FROM carros WHERE id = @id;";
            comandoSQL = comandoSQL.Replace("@id", Id.ToString());

            Db.ExecutarComando(comandoSQL);
        }
    }
}